home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Graphics Programming (2nd Edition) / Visual Basic Graphics Programming 2nd Edition.iso / Src / Ch5 / PolyPrnt.frm (.txt) < prev    next >
Visual Basic Form  |  1999-04-05  |  10KB  |  261 lines

  1. VERSION 5.00
  2. Begin VB.Form frmPolyPrnt 
  3.    Caption         =   "PolyPrnt"
  4.    ClientHeight    =   975
  5.    ClientLeft      =   60
  6.    ClientTop       =   345
  7.    ClientWidth     =   2175
  8.    LinkTopic       =   "Form1"
  9.    ScaleHeight     =   975
  10.    ScaleWidth      =   2175
  11.    StartUpPosition =   3  'Windows Default
  12.    Begin VB.CommandButton cmdPrint 
  13.       Caption         =   "Print"
  14.       Height          =   495
  15.       Left            =   480
  16.       TabIndex        =   0
  17.       Top             =   240
  18.       Width           =   1215
  19.    End
  20. Attribute VB_Name = "frmPolyPrnt"
  21. Attribute VB_GlobalNameSpace = False
  22. Attribute VB_Creatable = False
  23. Attribute VB_PredeclaredId = True
  24. Attribute VB_Exposed = False
  25. Option Explicit
  26. Private Type POINTAPI
  27.     X As Long
  28.     Y As Long
  29. End Type
  30. Private Declare Function Polyline Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long
  31. Private Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long
  32. Private Declare Function PolyPolyline Lib "gdi32" (ByVal hdc As Long, lppt As POINTAPI, lpdwPolyPoints As Long, ByVal cCount As Long) As Long
  33. Private Declare Function PolyPolygon Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, lpPolyCounts As Long, ByVal nCount As Long) As Long
  34. ' Convert the points from pixels to twips with
  35. ' the indicated offsets.
  36. Private Sub OffsetPoints(ByVal num_points As Integer, ByVal xscale As Single, ByVal yscale As Single, ByVal xoff As Single, ByVal yoff As Single, ByRef pt() As POINTAPI, ByRef xmin As Single, ByRef ymin As Single, ByRef xmax As Single, ByRef ymax As Single)
  37. Dim i As Integer
  38.     xmin = 10000
  39.     xmax = -10000
  40.     ymin = 10000
  41.     ymax = -10000
  42.     ' Convert the points.
  43.     For i = 1 To num_points
  44.         With pt(i)
  45.             .X = xscale * .X + xoff
  46.             .Y = yscale * .Y + yoff
  47.             If xmin > .X Then xmin = .X
  48.             If xmax < .X Then xmax = .X
  49.             If ymin > .Y Then ymin = .Y
  50.             If ymax < .Y Then ymax = .Y
  51.         End With
  52.     Next i
  53.     ' Allow room for a margin.
  54.     xmin = xmin - 30
  55.     xmax = xmax + 30
  56.     ymin = ymin - 30
  57.     ymax = ymax + 30
  58. End Sub
  59. Private Sub cmdPrint_Click()
  60. Dim pt(1 To 100) As POINTAPI
  61. Dim counts(1 To 10) As Long
  62. Dim i As Integer
  63. Dim j As Integer
  64. Dim start_i As Integer
  65. Dim xmin As Single
  66. Dim xmax As Single
  67. Dim ymin As Single
  68. Dim ymax As Single
  69.     ' Work in pixels.
  70.     Printer.ScaleMode = vbPixels
  71.     ' ---------------
  72.     ' Draw a polyline
  73.     ' ---------------
  74.     i = 1
  75.     pt(i).X = 96:    pt(i).Y = 60:    i = i + 1
  76.     pt(i).X = 84:    pt(i).Y = 71:    i = i + 1
  77.     pt(i).X = 66:    pt(i).Y = 71:    i = i + 1
  78.     pt(i).X = 60:    pt(i).Y = 48:    i = i + 1
  79.     pt(i).X = 82:    pt(i).Y = 35:    i = i + 1
  80.     pt(i).X = 112:    pt(i).Y = 42:    i = i + 1
  81.     pt(i).X = 114:    pt(i).Y = 63:    i = i + 1
  82.     pt(i).X = 106:    pt(i).Y = 78:    i = i + 1
  83.     pt(i).X = 85:    pt(i).Y = 86:    i = i + 1
  84.     pt(i).X = 51:    pt(i).Y = 86:    i = i + 1
  85.     pt(i).X = 36:    pt(i).Y = 64:    i = i + 1
  86.     pt(i).X = 44:    pt(i).Y = 35:    i = i + 1
  87.     pt(i).X = 70:    pt(i).Y = 17:    i = i + 1
  88.     pt(i).X = 108:    pt(i).Y = 17:    i = i + 1
  89.     pt(i).X = 126:    pt(i).Y = 32:    i = i + 1
  90.     pt(i).X = 139:    pt(i).Y = 60:    i = i + 1
  91.     pt(i).X = 134:    pt(i).Y = 87:    i = i + 1
  92.     pt(i).X = 115:    pt(i).Y = 99:    i = i + 1
  93.     pt(i).X = 86:    pt(i).Y = 104:    i = i + 1
  94.     pt(i).X = 40:    pt(i).Y = 102:    i = i + 1
  95.     pt(i).X = 19:    pt(i).Y = 79:    i = i + 1
  96.     pt(i).X = 13:    pt(i).Y = 46:    i = i + 1
  97.     pt(i).X = 25:    pt(i).Y = 16:    i = i + 1
  98.     OffsetPoints i - 1, 5, 5, 0, 0, pt, xmin, ymin, xmax, ymax
  99.     Printer.FillStyle = vbFSTransparent
  100.     Printer.Line (xmin, ymin)-(xmax, ymax), , B
  101.     Polyline Printer.hdc, pt(1), i - 1
  102.     ' --------------
  103.     ' Draw a polygon
  104.     ' --------------
  105.     i = 1
  106.     pt(i).X = 66:    pt(i).Y = 20:    i = i + 1
  107.     pt(i).X = 53:    pt(i).Y = 50:    i = i + 1
  108.     pt(i).X = 110:   pt(i).Y = 52:    i = i + 1
  109.     pt(i).X = 105:   pt(i).Y = 22:    i = i + 1
  110.     pt(i).X = 144:   pt(i).Y = 26:    i = i + 1
  111.     pt(i).X = 123:   pt(i).Y = 81:    i = i + 1
  112.     pt(i).X = 38:    pt(i).Y = 83:    i = i + 1
  113.     pt(i).X = 11:    pt(i).Y = 13:    i = i + 1
  114.     OffsetPoints i - 1, 5, 5, 1000, 0, pt, xmin, ymin, xmax, ymax
  115.     Printer.FillStyle = vbDiagonalCross
  116.     Polygon Printer.hdc, pt(1), i - 1
  117.     Printer.FillStyle = vbFSTransparent
  118.     Printer.Line (xmin, ymin)-(xmax, ymax), , B
  119.     ' ------------------
  120.     ' Draw a PolyPolygon
  121.     ' ------------------
  122.     j = 1
  123.     i = 1
  124.     ' Polygon 1.
  125.     start_i = i
  126.     pt(i).X = 15:    pt(i).Y = 33:    i = i + 1
  127.     pt(i).X = 21:    pt(i).Y = 47:    i = i + 1
  128.     pt(i).X = 51:    pt(i).Y = 48:    i = i + 1
  129.     pt(i).X = 64:    pt(i).Y = 19:    i = i + 1
  130.     pt(i).X = 46:    pt(i).Y = 7:     i = i + 1
  131.     counts(j) = i - start_i
  132.     j = j + 1
  133.     ' Polygon 2.
  134.     start_i = i
  135.     pt(i).X = 80:    pt(i).Y = 29:   i = i + 1
  136.     pt(i).X = 75:    pt(i).Y = 17:   i = i + 1
  137.     pt(i).X = 95:    pt(i).Y = 6:    i = i + 1
  138.     pt(i).X = 144:   pt(i).Y = 11:   i = i + 1
  139.     pt(i).X = 152:   pt(i).Y = 82:   i = i + 1
  140.     pt(i).X = 138:   pt(i).Y = 100:  i = i + 1
  141.     pt(i).X = 63:    pt(i).Y = 103:  i = i + 1
  142.     pt(i).X = 49:    pt(i).Y = 91:   i = i + 1
  143.     pt(i).X = 59:    pt(i).Y = 80:   i = i + 1
  144.     pt(i).X = 72:    pt(i).Y = 88:   i = i + 1
  145.     pt(i).X = 127:   pt(i).Y = 84:   i = i + 1
  146.     pt(i).X = 139:   pt(i).Y = 72:   i = i + 1
  147.     pt(i).X = 131:   pt(i).Y = 20:   i = i + 1
  148.     pt(i).X = 101:   pt(i).Y = 16:   i = i + 1
  149.     counts(j) = i - start_i
  150.     j = j + 1
  151.     ' Polygon 3.
  152.     start_i = i
  153.     pt(i).X = 36:    pt(i).Y = 93:    i = i + 1
  154.     pt(i).X = 23:    pt(i).Y = 103:   i = i + 1
  155.     pt(i).X = 7:     pt(i).Y = 92:    i = i + 1
  156.     pt(i).X = 9:     pt(i).Y = 72:    i = i + 1
  157.     pt(i).X = 32:    pt(i).Y = 57:    i = i + 1
  158.     pt(i).X = 78:    pt(i).Y = 57:    i = i + 1
  159.     pt(i).X = 103:   pt(i).Y = 49:    i = i + 1
  160.     pt(i).X = 102:   pt(i).Y = 37:    i = i + 1
  161.     pt(i).X = 108:   pt(i).Y = 28:    i = i + 1
  162.     pt(i).X = 121:   pt(i).Y = 28:    i = i + 1
  163.     pt(i).X = 128:   pt(i).Y = 42:    i = i + 1
  164.     pt(i).X = 126:   pt(i).Y = 58:    i = i + 1
  165.     pt(i).X = 110:   pt(i).Y = 66:    i = i + 1
  166.     pt(i).X = 86:    pt(i).Y = 70:    i = i + 1
  167.     pt(i).X = 43:    pt(i).Y = 70:    i = i + 1
  168.     counts(j) = i - start_i
  169.     j = j + 1
  170.     ' Draw the PolyPolygon.
  171.     OffsetPoints i - 1, 5, 5, 1000, 1000, pt, xmin, ymin, xmax, ymax
  172.     Printer.FillStyle = vbDiagonalCross
  173.     PolyPolygon Printer.hdc, _
  174.         pt(1), counts(1), j - 1
  175.     Printer.FillStyle = vbFSTransparent
  176.     Printer.Line (xmin, ymin)-(xmax, ymax), , B
  177.     ' -------------------
  178.     ' Draw a PolyPolyline
  179.     ' -------------------
  180.     j = 1
  181.     i = 1
  182.     ' Polyline 1.
  183.     start_i = i
  184.     pt(i).X = 14:    pt(i).Y = 31:    i = i + 1
  185.     pt(i).X = 26:    pt(i).Y = 42:    i = i + 1
  186.     pt(i).X = 16:    pt(i).Y = 58:    i = i + 1
  187.     pt(i).X = 29:    pt(i).Y = 73:    i = i + 1
  188.     pt(i).X = 19:    pt(i).Y = 96:    i = i + 1
  189.     counts(j) = i - start_i
  190.     j = j + 1
  191.     ' Polyline 2.
  192.     start_i = i
  193.     pt(i).X = 34:    pt(i).Y = 28:    i = i + 1
  194.     pt(i).X = 51:    pt(i).Y = 40:    i = i + 1
  195.     pt(i).X = 39:    pt(i).Y = 56:    i = i + 1
  196.     pt(i).X = 52:    pt(i).Y = 75:    i = i + 1
  197.     pt(i).X = 43:    pt(i).Y = 93:    i = i + 1
  198.     counts(j) = i - start_i
  199.     j = j + 1
  200.     ' Polyline 3.
  201.     start_i = i
  202.     pt(i).X = 50:    pt(i).Y = 26:    i = i + 1
  203.     pt(i).X = 74:    pt(i).Y = 40:    i = i + 1
  204.     pt(i).X = 59:    pt(i).Y = 55:    i = i + 1
  205.     pt(i).X = 68:    pt(i).Y = 73:    i = i + 1
  206.     pt(i).X = 60:    pt(i).Y = 98:    i = i + 1
  207.     counts(j) = i - start_i
  208.     j = j + 1
  209.     ' Polyline 4.
  210.     start_i = i
  211.     pt(i).X = 71:    pt(i).Y = 24:    i = i + 1
  212.     pt(i).X = 82:    pt(i).Y = 42:    i = i + 1
  213.     pt(i).X = 74:    pt(i).Y = 60:    i = i + 1
  214.     pt(i).X = 81:    pt(i).Y = 78:    i = i + 1
  215.     pt(i).X = 72:    pt(i).Y = 97:    i = i + 1
  216.     counts(j) = i - start_i
  217.     j = j + 1
  218.     ' Polyline 5.
  219.     start_i = i
  220.     pt(i).X = 87:    pt(i).Y = 25:    i = i + 1
  221.     pt(i).X = 99:    pt(i).Y = 41:    i = i + 1
  222.     pt(i).X = 93:    pt(i).Y = 56:    i = i + 1
  223.     pt(i).X = 98:    pt(i).Y = 75:    i = i + 1
  224.     pt(i).X = 87:    pt(i).Y = 95:    i = i + 1
  225.     counts(j) = i - start_i
  226.     j = j + 1
  227.     ' Polyline 6.
  228.     start_i = i
  229.     pt(i).X = 101:    pt(i).Y = 25:    i = i + 1
  230.     pt(i).X = 112:    pt(i).Y = 42:    i = i + 1
  231.     pt(i).X = 104:    pt(i).Y = 58:    i = i + 1
  232.     pt(i).X = 108:    pt(i).Y = 77:    i = i + 1
  233.     pt(i).X = 100:    pt(i).Y = 97:    i = i + 1
  234.     counts(j) = i - start_i
  235.     j = j + 1
  236.     ' Polyline 7.
  237.     start_i = i
  238.     pt(i).X = 115:    pt(i).Y = 24:    i = i + 1
  239.     pt(i).X = 125:    pt(i).Y = 44:    i = i + 1
  240.     pt(i).X = 118:    pt(i).Y = 59:    i = i + 1
  241.     pt(i).X = 123:    pt(i).Y = 81:    i = i + 1
  242.     pt(i).X = 114:    pt(i).Y = 95:    i = i + 1
  243.     counts(j) = i - start_i
  244.     j = j + 1
  245.     ' Polyline 8.
  246.     start_i = i
  247.     pt(i).X = 127:    pt(i).Y = 25:    i = i + 1
  248.     pt(i).X = 142:    pt(i).Y = 43:    i = i + 1
  249.     pt(i).X = 131:    pt(i).Y = 58:    i = i + 1
  250.     pt(i).X = 133:    pt(i).Y = 77:    i = i + 1
  251.     pt(i).X = 126:    pt(i).Y = 94:    i = i + 1
  252.     ' Draw the PolyPolyline.
  253.     OffsetPoints i - 1, 5, 5, 0, 1000, pt, xmin, ymin, xmax, ymax
  254.     Printer.FillStyle = vbDiagonalCross
  255.     PolyPolyline Printer.hdc, _
  256.         pt(1), counts(1), j - 1
  257.     Printer.FillStyle = vbFSTransparent
  258.     Printer.Line (xmin, ymin)-(xmax, ymax), , B
  259.     Printer.EndDoc
  260. End Sub
  261.